package com.wind.utils;

import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTCreator;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.interfaces.DecodedJWT;

import java.util.Calendar;
import java.util.Map;

/**
 * @作者： ✎…SummerWind🌬🌬
 * @时间： 2020/10/13 14:29
 * @描述： 封装 JWT 工具类
*/
public class JWTUtil {
  // 设置签名
  private static final String SING = "token-fsfqeq24e21~!@#";

  /*
   * @作者： ✎…SummerWind🌬🌬
   * @时间： 2020/10/13 14:34
   * @描述： 生成Token
  */
  public static String getToken(Map<String, String> map) {
    // 设置令牌过期时间
    Calendar calendar = Calendar.getInstance();
    calendar.add(Calendar.DATE, 7); // 7天过期

    // 创建 jwt builder
    JWTCreator.Builder builder = JWT.create();

    // 设置payload
    map.forEach((k, v) -> {
      builder.withClaim(k, v);
    });

    String token = builder
      .withExpiresAt(calendar.getTime()) // 设置过期时间
      .sign(Algorithm.HMAC256(SING));    // 设置签名

    return token;
  }

  /*
   * @作者： ✎…SummerWind🌬🌬
   * @时间： 2020/10/13 14:43
   * @描述： 校验（如果校验失败 会抛出异常信息）并 返回 jwt 对象（包含所有信息）
  */
  public static DecodedJWT getTokenInfo(String token) {
    DecodedJWT jwt = JWT.require(Algorithm.HMAC256(SING)).build().verify(token);
    return jwt;
  }
}
